package models

import (
	"activity_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

type CutUserJoin struct {
	Id          uint32    `gorm:"column:id;type:int UNSIGNED;comment:用户参与砍价表ID;primaryKey;not null;" json:"id"`                                     // 用户参与砍价表ID
	Uid         uint32    `gorm:"column:uid;type:int UNSIGNED;comment:用户ID;not null;" json:"uid"`                                                   // 用户ID
	CutGoodsId  uint32    `gorm:"column:cut_goods_id;type:int UNSIGNED;comment:砍价商品id;not null;" json:"cut_goods_id"`                               // 砍价商品id
	CutPriceMin float64   `gorm:"column:cut_price_min;type:decimal(10, 2);comment:砍价的最低价;not null;" json:"cut_price_min"`                           // 砍价的最低价
	CutPrice    float64   `gorm:"column:cut_price;type:decimal(10, 2);comment:砍价金额;not null;" json:"cut_price"`                                     // 砍价金额
	Num         uint32    `gorm:"column:num;type:int UNSIGNED;comment:购买数量;not null;" json:"num"`                                                   // 购买数量
	IsCutPrice  float64   `gorm:"column:is_cut_price;type:decimal(10, 2);comment:砍掉的价格;not null;" json:"is_cut_price"`                              // 砍掉的价格
	Status      uint8     `gorm:"column:status;type:tinyint UNSIGNED;comment:状态 1参与中 2活动结束参与成功 3活动结束参与失败   4已使用;not null;default:0;" json:"status"` // 状态 1参与中 2活动结束参与成功 3活动结束参与失败   4已使用
	CreateAt    time.Time `gorm:"column:create_at;type:datetime;not null;default:CURRENT_TIMESTAMP;" json:"create_at"`
	UpdateAt    time.Time `gorm:"column:update_at;type:datetime;not null;default:CURRENT_TIMESTAMP;" json:"update_at"`
	DeleteAt    time.Time `gorm:"column:delete_at;type:datetime;default:NULL;" json:"delete_at"`
}

func (c *CutUserJoin) TableName() string {
	return "cut_user_join"
}

// 创建参加记录
func (c *CutUserJoin) CreateUserJoin(tx *gorm.DB) error {
	return tx.Create(&c).Error
}

// id查询
func (c *CutUserJoin) GetByJoinId() error {
	return config.DB.Where("id = ?", c.Id).Limit(1).Find(&c).Error
}

// 修改砍价记录
func (c *CutUserJoin) UpdateJoin(tx *gorm.DB) error {
	return tx.Updates(&c).Error
}

// 用户参加的砍价记录列表
func (c *CutUserJoin) UserJoinList() (join []CutUserJoin, err error) {
	err = config.DB.Where("uid = ?", c.Uid).Find(&join).Error
	return
}

// 获取用于参与某活动的次数
func (c *CutUserJoin) JoinOneActivityCount() int64 {
	var join []CutUserJoin
	var count int64
	config.DB.Where("uid = ? and cut_goods_id", c.Uid, c.CutGoodsId).Find(&join).Count(&count)
	return count
}

// 砍价记录详情
func (c *CutUserJoin) JoinDetail() error {
	err := config.DB.Where("id = ?", c.Id).Find(&c).Error
	return err
}

// 删除记录
func (c *CutUserJoin) DelJoin() error {
	return config.DB.Delete(&c).Error
}

// 修改记录状态
func (c *CutUserJoin) UpdateJoinStatus() error {
	return config.DB.Updates(&c).Error
}

// 记录列表
func (c *CutUserJoin) CutJoinList() (join []CutUserJoin, err error) {
	err = config.DB.Find(&join).Error
	return
}
